package com.zx.Dao;

/**
 * com.zx.Dao
 * 26832
 * zx
 * &#064;description:
 * &#064;author: lxm
 * Untile
 * &#064;create: 2024-06-24 10:02
 **/
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC工具类，使用HikariCP作为数据库连接池
 */
public class JdbcPool {

    private static HikariDataSource dataSource;

    static {
        // 初始化HikariCP配置
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3308/zx");
        config.setUsername("root");
        config.setPassword("root");
        config.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 可以根据需要调整其他配置，如最大连接数、最小空闲连接数等
        config.setMaximumPoolSize(10);
        config.setMinimumIdle(5);

        dataSource = new HikariDataSource(config);
    }

    /**
     * 获取数据库连接
     * @return 数据库连接
     */
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException("获取数据库连接失败", e);
        }
    }

    /**
     * 关闭资源
     * @param con 数据库连接
     * @param smt SQL语句执行对象
     * @param rs 结果集
     */
    public static void closeResources(Connection con, Statement smt, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (smt != null) smt.close();
            // 连接归还给连接池，而不是关闭
            if (con != null) con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 其他数据库操作方法可以按需添加
}
